"""
https://leetcode.cn/problems/compare-version-numbers/description/

165. 比较版本号
中等
相关标签
相关企业
提示
给你两个 版本号字符串 version1 和 version2 ，请你比较它们。版本号由被点 '.' 分开的修订号组成。修订号的值 是它 转换为整数 并忽略前导零。

比较版本号时，请按 从左到右的顺序 依次比较它们的修订号。如果其中一个版本字符串的修订号较少，则将缺失的修订号视为 0。

返回规则如下：

如果 version1 < version2 返回 -1，
如果 version1 > version2 返回 1，
除此之外返回 0。
 

示例 1：

输入：version1 = "1.2", version2 = "1.10"

输出：-1

解释：

version1 的第二个修订号为 "2"，version2 的第二个修订号为 "10"：2 < 10，所以 version1 < version2。

示例 2：

输入：version1 = "1.01", version2 = "1.001"

输出：0

解释：

忽略前导零，"01" 和 "001" 都代表相同的整数 "1"。

示例 3：

输入：version1 = "1.0", version2 = "1.0.0.0"

输出：0

解释：

version1 有更少的修订号，每个缺失的修订号按 "0" 处理。

 

提示：

1 <= version1.length, version2.length <= 500
version1 和 version2 仅包含数字和 '.'
version1 和 version2 都是 有效版本号
version1 和 version2 的所有修订号都可以存储在 32 位整数 中

"""

from typing import Tuple


class Solution:
    def compareVersion(self, version1: str, version2: str) -> int:
        def find_next_version(version:str,start:int=0)->Tuple[int,int]:
            if start>=len(version):
                return (0,start)
            end=len(version)
            for i in range(start,len(version)):
                if version[i]=='.':
                    end=i
                    break
            temp=version[start:end]
            return (int(temp),end)
        
        start1=start2=0
        while start1<len(version1) or start2<len(version2):
            (gv1,end1)=find_next_version(version1,start1)
            (gv2,end2)=find_next_version(version2,start2)
            if gv1>gv2:
                return 1
            elif gv1<gv2:
                return -1
            else:
                start1=end1+1
                start2=end2+1
        return 0

if __name__=='__main__':
    sol=Solution()
    version1='1.0'
    version2='1.0.0.0'
    res=sol.compareVersion(version1,version2)
    print(res)
    pass